package pe.edu.upc.e41a.javasoft.service;

import java.util.List;

import javax.persistence.TypedQuery;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.e41a.javasoft.domain.TipoDocumento;


@Service
@Transactional
public class TipoDocumentoServiceImpl implements TipoDocumentoService {

	public long countAllTipoDocumentoes() {
        return TipoDocumento.countTipoDocumentoes();
    }

	public void deleteTipoDocumento(TipoDocumento tipoDocumento) {
        tipoDocumento.remove();
    }

	public TipoDocumento findTipoDocumento(Integer id) {
        return TipoDocumento.findTipoDocumento(id);
    }

	public List<TipoDocumento> findAllTipoDocumentoes() {
        return TipoDocumento.findAllTipoDocumentoes();
    }

	public List<TipoDocumento> findTipoDocumentoEntries(int firstResult, int maxResults) {
        return TipoDocumento.findTipoDocumentoEntries(firstResult, maxResults);
    }

	public void saveTipoDocumento(TipoDocumento tipoDocumento) {
        tipoDocumento.persist();
    }

	public TipoDocumento updateTipoDocumento(TipoDocumento tipoDocumento) {
        return tipoDocumento.merge();
    }
	
	
	@Override
	public String insertarTipoDocumento(TipoDocumento tipoDocumento) {
		String mensaje =null;
		try {
			tipoDocumento.persist();
			mensaje="El tipo de documento: "+tipoDocumento.getDescripcion() +" se registró exitosamente";
		} catch (Exception e) {
			mensaje="Error al registrar el tipo de documento";
			return mensaje;
		}
		return mensaje;
	}


	public String actualizarTipoDocumento(TipoDocumento tipoDocumento) {
		tipoDocumento.merge();
		return null;
	}

	
	public String eliminarTipoDocumento(TipoDocumento tipoDocumento) {
		tipoDocumento.remove();
		return null;
	}


	public long contarTipoDocumentos() {
		return TipoDocumento.countTipoDocumentoes();
	}


	public List<TipoDocumento> listarTodoTipoDocumentos() {
		return TipoDocumento.findAllTipoDocumentoes();
	}


	public TipoDocumento buscarTipoDocumentoPorCodigo(Integer codigo) {
		return TipoDocumento.findTipoDocumento(codigo);
	}


	public TipoDocumento buscarTipoDocumentoesPorDescripcionExacta(
			String descripcion) {
		TypedQuery<TipoDocumento> tipoDocumento = TipoDocumento
				.findTipoDocumentoesByDescripcionEquals(descripcion);
		TipoDocumento tipoDocumentoresultado = tipoDocumento.getSingleResult();
		return tipoDocumentoresultado;
	}

	
	public TipoDocumento obtenerTipoDocumento(String idTipoDocumento) {
		return TipoDocumento.findTipoDocumento(Integer.parseInt(idTipoDocumento));
	}

}
